home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 5 / BBS in a Box -Volume V (BBS in a Box) (April 1992).iso / Files / Prog / M / MPWGCC (Docs).cpt / Documents / Info / gcc.info-10 < prev    next >
Encoding:
Text File  |  1990-03-14  |  26.8 KB  |  624 lines  |  [TEXT/MPS ]

  1. Info file gcc.info, produced by Makeinfo, -*- Text -*- from input
  2. file gcc.texinfo.
  3.  
  4. This file documents the use and the internals of the GNU compiler.
  5.  
  6. Copyright (C) 1988, 1989 Free Software Foundation, Inc.
  7.  
  8. Permission is granted to make and distribute verbatim copies of this
  9. manual provided the copyright notice and this permission notice are
  10. preserved on all copies.
  11.  
  12. Permission is granted to copy and distribute modified versions of
  13. this manual under the conditions for verbatim copying, provided also
  14. that the sections entitled ``GNU General Public License'' and
  15. ``Protect Your Freedom--Fight `Look And Feel''' are included exactly
  16. as in the original, and provided that the entire resulting derived
  17. work is distributed under the terms of a permission notice identical
  18. to this one.
  19.  
  20. Permission is granted to copy and distribute translations of this
  21. manual into another language, under the above conditions for modified
  22. versions, except that the sections entitled ``GNU General Public
  23. License'' and ``Protect Your Freedom--Fight `Look And Feel''' and
  24. this permission notice may be included in translations approved by
  25. the Free Software Foundation instead of in the original English.
  26.  
  27.  
  28. 
  29. File: gcc.info,  Node: Assembler Format,  Prev: Misc,  Up: Machine Macros
  30.  
  31. Output of Assembler Code
  32. ========================
  33.  
  34. `ASM_SPEC'
  35.      A C string constant that tells the GNU CC driver program options
  36.      to pass to the assembler.  It can also specify how to translate
  37.      options you give to GNU CC into options for GNU CC to pass to
  38.      the assembler.  See the file `tm-sun3.h' for an example of this.
  39.  
  40.      Do not define this macro if it does not need to do anything.
  41.  
  42. `LINK_SPEC'
  43.      A C string constant that tells the GNU CC driver program options
  44.      to pass to the linker.  It can also specify how to translate
  45.      options you give to GNU CC into options for GNU CC to pass to
  46.      the linker.
  47.  
  48.      Do not define this macro if it does not need to do anything.
  49.  
  50. `LIB_SPEC'
  51.      Another C string constant used much like `LINK_SPEC'.  The
  52.      difference between the two is that `LIBS_SPEC' is used at the
  53.      end of the command given to the linker.
  54.  
  55.      If this macro is not defined, a default is provided that loads
  56.      the standard C library from the usual place.  See `gcc.c'.
  57.  
  58. `STARTFILE_SPEC'
  59.      Another C string constant used much like `LINK_SPEC'.  The
  60.      difference between the two is that `STARTFILE_SPEC' is used at
  61.      the very beginning of the command given to the linker.
  62.  
  63.      If this macro is not defined, a default is provided that loads
  64.      the standard C startup file from the usual place.  See `gcc.c'.
  65.  
  66. `STANDARD_EXEC_PREFIX'
  67.      Define this macro as a C string constant if you wish to override
  68.      the standard choice of `/usr/local/lib/gcc-' as the default
  69.      prefix to try when searching for the executable files of the
  70.      compiler.
  71.  
  72.      The prefix specified by the `-B' option, if any, is tried before
  73.      the default prefix.  After the default prefix, if the executable
  74.      is not found that way, `/usr/lib/gcc-' is tried next; then the
  75.      directories in your search path for shell commands are searched.
  76.  
  77. `STANDARD_STARTFILE_PREFIX'
  78.      Define this macro as a C string constant if you wish to override
  79.      the standard choice of `/usr/local/lib/' as the default prefix
  80.      to try when searching for startup files such as `crt0.o'.
  81.  
  82.      In this search, all the prefixes tried for executable files are
  83.      tried first.  Then comes the default startfile prefix specified
  84.      by this macro, followed by the prefixes `/lib/' and `/usr/lib/'
  85.      as last resorts.
  86.  
  87. `ASM_FILE_START (STREAM)'
  88.      A C expression which outputs to the stdio stream STREAM some
  89.      appropriate text to go at the start of an assembler file.
  90.  
  91.      Normally this macro is defined to output a line containing
  92.      `#NO_APP', which is a comment that has no effect on most
  93.      assemblers but tells the GNU assembler that it can save time by
  94.      not checking for certain assembler constructs.
  95.  
  96.      On systems that use SDB, it is necessary to output certain
  97.      commands; see `tm-attasm.h'.
  98.  
  99. `ASM_FILE_END (STREAM)'
  100.      A C expression which outputs to the stdio stream STREAM some
  101.      appropriate text to go at the end of an assembler file.
  102.  
  103.      If this macro is not defined, the default is to output nothing
  104.      special at the end of the file.  Most systems don't require any
  105.      definition.
  106.  
  107.      On systems that use SDB, it is necessary to output certain
  108.      commands; see `tm-attasm.h'.
  109.  
  110. `ASM_IDENTIFY_GCC (FILE)'
  111.      A C statement to output assembler commands which will identify
  112.      the object file as having been compiled with GNU CC (or another
  113.      GNU compiler).
  114.  
  115.      If you don't define this macro, the string `gcc_compiled.:' is
  116.      output.  This string is calculated to define a symbol which, on
  117.      BSD systems, will never be defined for any other reason.  GDB
  118.      checks for the presence of this symbol when reading the symbol
  119.      table of an executable.
  120.  
  121.      On non-BSD systems, you must arrange communication with GDB in
  122.      some other fashion.  If GDB is not used on your system, you can
  123.      define this macro with an empty body.
  124.  
  125. `ASM_APP_ON'
  126.      A C string constant for text to be output before each `asm'
  127.      statement or group of consecutive ones.  Normally this is
  128.      `"#APP"', which is a comment that has no effect on most
  129.      assemblers but tells the GNU assembler that it must check the
  130.      lines that follow for all valid assembler constructs.
  131.  
  132. `ASM_APP_OFF'
  133.      A C string constant for text to be output after each `asm'
  134.      statement or group of consecutive ones.  Normally this is
  135.      `"#NO_APP"', which tells the GNU assembler to resume making the
  136.      time-saving assumptions that are valid for ordinary compiler
  137.      output.
  138.  
  139. `TEXT_SECTION_ASM_OP'
  140.      A C string constant for the assembler operation that should
  141.      precede instructions and read-only data.  Normally `".text"' is
  142.      right.
  143.  
  144. `DATA_SECTION_ASM_OP'
  145.      A C string constant for the assembler operation to identify the
  146.      following data as writable initialized data.  Normally `".data"'
  147.      is right.
  148.  
  149. `EXTRA_SECTIONS'
  150.      A list of names for sections other than the standard two, which
  151.      are `in_text' and `in_data'.  You need not define this macro on
  152.      a system with no other sections (that GCC needs to use).
  153.  
  154. `EXTRA_SECTION_FUNCTIONS'
  155.      One or more functions to be defined in `varasm.c'.  These
  156.      functions should do jobs analogous to those of `text_section'
  157.      and `data_section', for your additional sections.  Do not define
  158.      this macro if you do not define `EXTRA_SECTIONS'.
  159.  
  160. `SELECT_SECTION (EXP)'
  161.      A C statement or statements to switch to the appropriate section
  162.      for output of EXP.  You can assume that EXP is either a
  163.      `VAR_DECL' node or a constant of some sort.  Select the section
  164.      by calling `text_section' or one of the alternatives for other
  165.      sections.
  166.  
  167.      Do not define this macro if you use only the standard two
  168.      sections and put all read-only variables and constants in the
  169.      text section.
  170.  
  171. `SELECT_RTX_SECTION (MODE, RTX)'
  172.      A C statement or statements to switch to the appropriate section
  173.      for output of RTX in mode MODE.  You can assume that RTX is some
  174.      kind of constant in RTL.  The argument MODE is redundant except
  175.      in the case of a `const_int' rtx.  Select the section by calling
  176.      `text_section' or one of the alternatives for other sections.
  177.  
  178.      Do not define this macro if you use only the standard two
  179.      sections and put all constants in the text section.
  180.  
  181. `REGISTER_NAMES'
  182.      A C initializer containing the assembler's names for the machine
  183.      registers, each one as a C string constant.  This is what
  184.      translates register numbers in the compiler into assembler
  185.      language.
  186.  
  187. `DBX_REGISTER_NUMBER (REGNO)'
  188.      A C expression that returns the DBX register number for the
  189.      compiler register number REGNO.  In simple cases, the value of
  190.      this expression may be REGNO itself.  But sometimes there are
  191.      some registers that the compiler knows about and DBX does not,
  192.      or vice versa.  In such cases, some register may need to have
  193.      one number in the compiler and another for DBX.
  194.  
  195. `DBX_DEBUGGING_INFO'
  196.      Define this macro if GNU CC should produce debugging output for
  197.      DBX in response to the `-g' option.
  198.  
  199. `SDB_DEBUGGING_INFO'
  200.      Define this macro if GNU CC should produce debugging output for
  201.      SDB in response to the `-g' option.
  202.  
  203. `PUT_SDB_OP'
  204.      Define these macros to override the assembler syntax for the
  205.      special SDB assembler directives.  See `sdbout.c' for a list of
  206.      these macros and their arguments.  If the standard syntax is
  207.      used, you need not define them yourself.
  208.  
  209. `SDB_GENERATE_FAKE'
  210.      Define this macro to override the usual method of constructing a
  211.      dummy name for anonymous structure and union types.  See
  212.      `sdbout.c' for more information.
  213.  
  214. `DBX_NO_XREFS'
  215.      Define this macro if DBX on your system does not support the
  216.      construct `xsTAGNAME'.  On some systems, this construct is used
  217.      to describe a forward reference to a structure named TAGNAME. 
  218.      On other systems, this construct is not supported at all.
  219.  
  220. `DBX_CONTIN_LENGTH'
  221.      A symbol name in DBX-format debugging information is normally
  222.      continued (split into two separate `.stabs' directives) when it
  223.      exceeds a certain length (by default, 80 characters).  On some
  224.      operating systems, DBX requires this splitting; on others,
  225.      splitting must not be done.  You can inhibit splitting by
  226.      defining this macro with the value zero.  You can override the
  227.      default splitting-length by defining this macro as an expression
  228.      for the length you desire.
  229.  
  230. `DBX_CONTIN_CHAR'
  231.      Normally continuation is indicated by adding a `\' character to
  232.      the end of a `.stabs' string when a continuation follows.  To
  233.      use a different character instead, define this macro as a
  234.      character constant for the character you want to use.  Do not
  235.      define this macro if backslash is correct for your system.
  236.  
  237. `DBX_STATIC_STAB_DATA_SECTION'
  238.      Define this macro if it is necessary to go to the data section
  239.      before outputting the `.stabs' pseudo-op for a non-global static
  240.      variable.
  241.  
  242. `ASM_OUTPUT_LABEL (STREAM, NAME)'
  243.      A C statement (sans semicolon) to output to the stdio stream
  244.      STREAM the assembler definition of a label named NAME.  Use the
  245.      expression `assemble_name (STREAM, NAME)' to output the name
  246.      itself; before and after that, output the additional assembler
  247.      syntax for defining the name, and a newline.
  248.  
  249. `ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL)'
  250.      A C statement (sans semicolon) to output to the stdio stream
  251.      STREAM any text necessary for declaring the name NAME of a
  252.      function which is being defined.  This macro is responsible for
  253.      outputting the label definition (perhaps using
  254.      `ASM_OUTPUT_LABEL').  The argument DECL is the `FUNCTION_DECL'
  255.      tree node representing the function.
  256.  
  257.      If this macro is not defined, then the function name is defined
  258.      in the usual manner as a label (by means of `ASM_OUTPUT_LABEL').
  259.  
  260. `ASM_GLOBALIZE_LABEL (STREAM, NAME)'
  261.      A C statement (sans semicolon) to output to the stdio stream
  262.      STREAM some commands that will make the label NAME global; that
  263.      is, available for reference from other files.  Use the
  264.      expression `assemble_name (STREAM, NAME)' to output the name
  265.      itself; before and after that, output the additional assembler
  266.      syntax for making that name global, and a newline.
  267.  
  268. `ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME)'
  269.      A C statement (sans semicolon) to output to the stdio stream
  270.      STREAM any text necessary for declaring the name of an external
  271.      symbol named NAME which is referenced in this compilation but
  272.      not defined.  The value of DECL is the tree node for the
  273.      declaration.
  274.  
  275.      This macro need not be defined if it does not need to output
  276.      anything.  The GNU assembler and most Unix assemblers don't
  277.      require anything.
  278.  
  279. `ASM_OUTPUT_LABELREF (STREAM, NAME)'
  280.      A C statement to output to the stdio stream STREAM a reference
  281.      in assembler syntax to a label named NAME.  The character `_'
  282.      should be added to the front of the name, if that is customary
  283.      on your operating system, as it is in most Berkeley Unix
  284.      systems.  This macro is used in `assemble_name'.
  285.  
  286. `ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM)'
  287.      A C statement to store into the string STRING a label whose name
  288.      is made from the string PREFIX and the number NUM.
  289.  
  290.      This string, when output subsequently by `ASM_OUTPUT_LABELREF',
  291.      should produce the same output that `ASM_OUTPUT_INTERNAL_LABEL'
  292.      would produce with the same PREFIX and NUM.
  293.  
  294. `ASM_OUTPUT_INTERNAL_LABEL (STREAM, PREFIX, NUM)'
  295.      A C statement to output to the stdio stream STREAM a label whose
  296.      name is made from the string PREFIX and the number NUM.  These
  297.      labels are used for internal purposes, and there is no reason
  298.      for them to appear in the symbol table of the object file.  On
  299.      many systems, the letter `L' at the beginning of a label has
  300.      this effect.  The usual definition of this macro is as follows:
  301.  
  302.           fprintf (STREAM, "L%s%d:\n", PREFIX, NUM)
  303.  
  304. `ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE)'
  305.      Define this if the label before a jump-table needs to be output
  306.      specially.  The first three arguments are the same as for
  307.      `ASM_OUTPUT_INTERNAL_LABEL'; the fourth argument is the
  308.      jump-table which follows (a `jump_insn' containing an `addr_vec'
  309.      or `addr_diff_vec').
  310.  
  311.      This feature is used on system V to output a `swbeg' statement
  312.      for the table.
  313.  
  314.      If this macro is not defined, these labels are output with
  315.      `ASM_OUTPUT_INTERNAL_LABEL'.
  316.  
  317. `ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE)'
  318.      Define this if something special must be output at the end of a
  319.      jump-table.  The definition should be a C statement to be
  320.      executed after the assembler code for the table is written.  It
  321.      should write the appropriate code to stdio stream STREAM.  The
  322.      argument TABLE is the jump-table insn, and NUM is the
  323.      label-number of the preceding label.
  324.  
  325.      If this macro is not defined, nothing special is output at the
  326.      end of the jump-table.
  327.  
  328. `ASM_OUTPUT_ALIGN_CODE (FILE)'
  329.      A C expression to output text to align the location counter in
  330.      the way that is desirable at a point in the code that is reached
  331.      only by jumping.
  332.  
  333.      This macro need not be defined if you don't want any special
  334.      alignment to be done at such a time.  Most machine descriptions
  335.      do not currently define the macro.
  336.  
  337. `ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER)'
  338.      A C expression to assign to OUTVAR (which is a variable of type
  339.      `char *') a newly allocated string made from the string NAME and
  340.      the number NUMBER, with some suitable punctuation added.  Use
  341.      `alloca' to get space for the string.
  342.  
  343.      This string will be used as the argument to
  344.      `ASM_OUTPUT_LABELREF' to produce an assembler label for an
  345.      internal static variable whose name is NAME.  Therefore, the
  346.      string must be such as to result in valid assembler code.  The
  347.      argument NUMBER is different each time this macro is executed;
  348.      it prevents conflicts between similarly-named internal static
  349.      variables in different scopes.
  350.  
  351.      Ideally this string should not be a valid C identifier, to
  352.      prevent any conflict with the user's own symbols.  Most
  353.      assemblers allow periods or percent signs in assembler symbols;
  354.      putting at least one of these between the name and the number
  355.      will suffice.
  356.  
  357. `ASM_OUTPUT_REG_PUSH (STREAM, REGNO)'
  358.      A C expression to output to STREAM some assembler code which
  359.      will push hard register number REGNO onto the stack.  The code
  360.      need not be optimal, since this macro is used only when profiling.
  361.  
  362. `ASM_OUTPUT_REG_POP (STREAM, REGNO)'
  363.      A C expression to output to STREAM some assembler code which
  364.      will pop hard register number REGNO off of the stack.  The code
  365.      need not be optimal, since this macro is used only when profiling.
  366.  
  367. `ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, VALUE, REL)'
  368.      This macro should be provided on machines where the addresses in
  369.      a dispatch table are relative to the table's own address.
  370.  
  371.      The definition should be a C statement to output to the stdio
  372.      stream STREAM an assembler pseudo-instruction to generate a
  373.      difference between two labels.  VALUE and REL are the numbers of
  374.      two internal labels.  The definitions of these labels are output
  375.      using `ASM_OUTPUT_INTERNAL_LABEL', and they must be printed in
  376.      the same way here.  For example,
  377.  
  378.           fprintf (STREAM, "\t.word L%d-L%d\n",
  379.                    VALUE, REL)
  380.  
  381. `ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE)'
  382.      This macro should be provided on machines where the addresses in
  383.      a dispatch table are absolute.
  384.  
  385.      The definition should be a C statement to output to the stdio
  386.      stream STREAM an assembler pseudo-instruction to generate a
  387.      reference to a label.  VALUE is the number of an internal label
  388.      whose definition is output using `ASM_OUTPUT_INTERNAL_LABEL'. 
  389.      For example,
  390.  
  391.           fprintf (STREAM, "\t.word L%d\n", VALUE)
  392.  
  393. `ASM_OUTPUT_DOUBLE (STREAM, VALUE)'
  394.      A C statement to output to the stdio stream STREAM an assembler
  395.      instruction to assemble a `double' constant whose value is
  396.      VALUE.  VALUE will be a C expression of type `double'.
  397.  
  398. `ASM_OUTPUT_FLOAT (STREAM, VALUE)'
  399.      A C statement to output to the stdio stream STREAM an assembler
  400.      instruction to assemble a `float' constant whose value is VALUE.
  401.      vALUE will be a C expression of type `float'.
  402.  
  403. `ASM_OUTPUT_INT (STREAM, EXP)'
  404. `ASM_OUTPUT_SHORT (STREAM, EXP)'
  405. `ASM_OUTPUT_CHAR (STREAM, EXP)'
  406.      A C statement to output to the stdio stream STREAM an assembler
  407.      instruction to assemble a `int', `short' or `char' constant
  408.      whose value is VALUE.  The argument EXP will be an RTL
  409.      expression which represents a constant value.  Use
  410.      `output_addr_const (EXP)' to output this value as an assembler
  411.      expression.
  412.  
  413. `ASM_OUTPUT_DOUBLE_INT (STREAM, EXP)'
  414.      A C statement to output to the stdio stream STREAM an assembler
  415.      instruction to assemble a `long long' constant whose value is
  416.      EXP.  The argument EXP will be an RTL expression which
  417.      represents a constant value.  It may be a `const_double' RTX, or
  418.      it may be an ordinary single-precision constant.  In the latter
  419.      case, you should zero-extend it.
  420.  
  421. `ASM_OUTPUT_BYTE (STREAM, VALUE)'
  422.      A C statement to output to the stdio stream STREAM an assembler
  423.      instruction to assemble a single byte containing the number VALUE.
  424.  
  425. `ASM_OUTPUT_ASCII (STREAM, PTR, LEN)'
  426.      A C statement to output to the stdio stream STREAM an assembler
  427.      instruction to assemble a string constant containing the LEN
  428.      bytes at PTR.  PTR will be a C expression of type `char *' and
  429.      LEN a C expression of type `int'.
  430.  
  431.      If the assembler has a `.ascii' pseudo-op as found in the
  432.      Berkeley Unix assembler, do not define the macro
  433.      `ASM_OUTPUT_ASCII'.
  434.  
  435. `ASM_OUTPUT_SKIP (STREAM, NBYTES)'
  436.      A C statement to output to the stdio stream STREAM an assembler
  437.      instruction to advance the location counter by NBYTES bytes. 
  438.      NBYTES will be a C expression of type `int'.
  439.  
  440. `ASM_OUTPUT_ALIGN (STREAM, POWER)'
  441.      A C statement to output to the stdio stream STREAM an assembler
  442.      instruction to advance the location counter to a multiple of 2
  443.      to the POWER bytes.  POWER will be a C expression of type `int'.
  444.  
  445. `ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED)'
  446.      A C statement (sans semicolon) to output to the stdio stream
  447.      STREAM the assembler definition of a common-label named NAME
  448.      whose size is SIZE bytes.  The variable ROUNDED is the size
  449.      rounded up to whatever alignment the caller wants.
  450.  
  451.      Use the expression `assemble_name (STREAM, NAME)' to output the
  452.      name itself; before and after that, output the additional
  453.      assembler syntax for defining the name, and a newline.
  454.  
  455.      This macro controls how the assembler definitions of
  456.      uninitialized global variables are output.
  457.  
  458. `ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED)'
  459.      A C statement (sans semicolon) to output to the stdio stream
  460.      STREAM the assembler definition of a local-common-label named
  461.      NAME whose size is SIZE bytes.  The variable ROUNDED is the size
  462.      rounded up to whatever alignment the caller wants.
  463.  
  464.      Use the expression `assemble_name (STREAM, NAME)' to output the
  465.      name itself; before and after that, output the additional
  466.      assembler syntax for defining the name, and a newline.
  467.  
  468.      This macro controls how the assembler definitions of
  469.      uninitialized static variables are output.
  470.  
  471. `ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME)'
  472.      A C statment to output DBX or SDB debugging information which
  473.      indicates that filename NAME is the current source file to the
  474.      stdio stream STREAM.
  475.  
  476.      This macro need not be defined if the standard form of debugging
  477.      information for the debugger in use is appropriate.
  478.  
  479. `ASM_OUTPUT_SOURCE_LINE (STREAM, LINE)'
  480.      A C statment to output DBX or SDB debugging information before
  481.      code for line number LINE of the current source file to the
  482.      stdio stream STREAM.
  483.  
  484.      This macro need not be defined if the standard form of debugging
  485.      information for the debugger in use is appropriate.
  486.  
  487. `ASM_OUTPUT_IDENT (STREAM, STRING)'
  488.      A C statement to output something to the assembler file to
  489.      handle a `#ident' directive containing the text STRING.  If this
  490.      macro is not defined, nothing is output for a `#ident' directive.
  491.  
  492. `TARGET_BELL'
  493.      A C constant expression for the integer value for escape
  494.      sequence `\a'.
  495.  
  496. `TARGET_BS'
  497. `TARGET_TAB'
  498. `TARGET_NEWLINE'
  499.      C constant expressions for the integer values for escape
  500.      sequences `\b', `\t' and `\n'.
  501.  
  502. `TARGET_VT'
  503. `TARGET_FF'
  504. `TARGET_CR'
  505.      C constant expressions for the integer values for escape
  506.      sequences `\v', `\f' and `\r'.
  507.  
  508. `ASM_OUTPUT_OPCODE (STREAM, PTR)'
  509.      Define this macro if you are using an unusual assembler that
  510.      requires different names for the machine instructions.
  511.  
  512.      The definition is a C statement or statements which output an
  513.      assembler instruction opcode to the stdio stream STREAM.  The
  514.      macro-operand PTR is a variable of type `char *' which points to
  515.      the opcode name in its ``internal'' form--the form that is
  516.      written in the machine description.  The definition should
  517.      output the opcode name to STREAM, performing any translation you
  518.      desire, and increment the variable PTR to point at the end of
  519.      the opcode so that it will not be output twice.
  520.  
  521.      In fact, your macro definition may process less than the entire
  522.      opcode name, or more than the opcode name; but if you want to
  523.      process text that includes `%'-sequences to substitute operands,
  524.      you must take care of the substitution yourself.  Just be sure
  525.      to increment PTR over whatever text should not be output normally.
  526.  
  527.      If you need to look at the operand values, they can be found as
  528.      the elements of `recog_operand'.
  529.  
  530.      If the macro definition does nothing, the instruction is output
  531.      in the usual way.
  532.  
  533. `FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS)'
  534.      If defined, a C statement to be executed just prior to the
  535.      output of assembler code for INSN, to modify the extracted
  536.      operands so they will be output differently.
  537.  
  538.      Here the argument OPVEC is the vector containing the operands
  539.      extracted from INSN, and NOPERANDS is the number of elements of
  540.      the vector which contain meaningful data for this insn.  The
  541.      contents of this vector are what will be used to convert the
  542.      insn template into assembler code, so you can change the
  543.      assembler output by changing the contents of the vector.
  544.  
  545.      This macro is useful when various assembler syntaxes share a
  546.      single file of instruction patterns; by defining this macro
  547.      differently, you can cause a large class of instructions to be
  548.      output differently (such as with rearranged operands). 
  549.      Naturally, variations in assembler syntax affecting individual
  550.      insn patterns ought to be handled by writing conditional output
  551.      routines in those patterns.
  552.  
  553.      If this macro is not defined, it is equivalent to a null
  554.      statement.
  555.  
  556. `PRINT_OPERAND (STREAM, X, CODE)'
  557.      A C compound statement to output to stdio stream STREAM the
  558.      assembler syntax for an instruction operand X.  X is an RTL
  559.      expression.
  560.  
  561.      CODE is a value that can be used to specify one of several ways
  562.      of printing the operand.  It is used when identical operands
  563.      must be printed differently depending on the context.  CODE
  564.      comes from the `%' specification that was used to request
  565.      printing of the operand.  If the specification was just `%DIGIT'
  566.      then CODE is 0; if the specification was `%LTR DIGIT' then CODE
  567.      is the ASCII code for LTR.
  568.  
  569.      If X is a register, this macro should print the register's name.
  570.      The names can be found in an array `reg_names' whose type is
  571.      `char *[]'.  `reg_names' is initialized from `REGISTER_NAMES'.
  572.  
  573.      When the machine description has a specification `%PUNCT' (a `%'
  574.      followed by a punctuation character), this macro is called with
  575.      a null pointer for X and the punctuation character for CODE.
  576.  
  577. `PRINT_OPERAND_PUNCT_VALID_P (CODE)'
  578.      A C expression which evaluates to true if CODE is a valid
  579.      punctuation character for use in the `PRINT_OPERAND' macro.  If
  580.      `PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no
  581.      punctuation characters (except for the standard one, `%') are
  582.      used in this way.
  583.  
  584. `PRINT_OPERAND_ADDRESS (STREAM, X)'
  585.      A C compound statement to output to stdio stream STREAM the
  586.      assembler syntax for an instruction operand that is a memory
  587.      reference whose address is X.  X is an RTL expression.
  588.  
  589. `ASM_OPEN_PAREN'
  590. `ASM_CLOSE_PAREN'
  591.      These macros are defined as C string constant, describing the
  592.      syntax in the assembler for grouping arithmetic expressions. 
  593.      The following definitions are correct for most assemblers:
  594.  
  595.           #define ASM_OPEN_PAREN "("
  596.           #define ASM_CLOSE_PAREN ")"
  597.  
  598.  
  599. 
  600. File: gcc.info,  Node: Config,  Prev: Machine Macros,  Up: Top
  601.  
  602. The Configuration File
  603. **********************
  604.  
  605. The configuration file `xm-MACHINE.h' contains macro definitions that
  606. describe the machine and system on which the compiler is running. 
  607. Most of the values in it are actually the same on all machines that
  608. GNU CC runs on, so large parts of all configuration files are
  609. identical.  But there are some macros that vary:
  610.  
  611. `FAILURE_EXIT_CODE'
  612.      A C expression for the status code to be returned when the
  613.      compiler exits after serious errors.
  614.  
  615. `SUCCESS_EXIT_CODE'
  616.      A C expression for the status code to be returned when the
  617.      compiler exits without serious errors.
  618.  
  619. In addition, configuration files for system V define `bcopy', `bzero'
  620. and `bcmp' as aliases.  Some files define `alloca' as a macro when
  621. compiled with GNU CC, in order to take advantage of the benefit of
  622. GNU CC's built-in `alloca'.
  623.  
  624.